Dynomotion

Group: DynoMotion Message: 8317 From: eric_bassett@ymail.com Date: 9/11/2013
Subject: Create smooth path with Coordinated Motion
Hello,


Is there a way in C# to build a path of StraightFeeds so that there is not a pause between each coordinated motion? Doing a series of StraightFeed, the axes stop between each move.

Thanks.
Group: DynoMotion Message: 8323 From: Tom Kerekes Date: 9/11/2013
Subject: Re: Create smooth path with Coordinated Motion
Hi Eric,

If the change in direction between straight feeds is less than the "Break Angle" setting then the axes should not stop.

After setting the Break Angle a call to:

KM_dotnet_Interop_CoordMotion_SetTPParams()

may be required to get the New Break Angle Setting to "take".  Some of our examples may be missing this.

HTH
Regards
TK

Group: DynoMotion Message: 8344 From: eric_bassett@ymail.com Date: 9/13/2013
Subject: Re: Create smooth path with Coordinated Motion

Tom,


Thank you for your response. It works fine now, but seems like b and c in an xyzabc coordinate system are flipped. If I call:


DefineCoordSystem6(1,3,2,4,7,6); 


in a thread on the KFLOP, the CM.Straightfeed runs as (1,3,2,4,6,7) in:

//MOTION PARAM SETUP

                int N = 2000;

                CM.MotionParams.BreakAngle = 50;

                CM.MotionParams.MaxAccelX = 10000;

                CM.MotionParams.MaxAccelY = 10000;

                CM.MotionParams.MaxAccelZ = 10000;

                CM.MotionParams.MaxAccelA = 10000;

                CM.MotionParams.MaxAccelB = 10000;

                CM.MotionParams.MaxAccelC = 10000;

                CM.MotionParams.MaxVelX = 1000;

                CM.MotionParams.MaxVelY = 1000;

                CM.MotionParams.MaxVelZ = 1000;

                CM.MotionParams.MaxVelA = 1000;

                CM.MotionParams.MaxVelB = 1000;

                CM.MotionParams.MaxVelC = 1000;

                CM.MotionParams.CountsPerInchX = 5.555;

                CM.MotionParams.CountsPerInchY = 200;

                CM.MotionParams.CountsPerInchZ = 11.11;

                CM.MotionParams.CountsPerInchA = 5.555;

                CM.MotionParams.CountsPerInchB = 200;

                CM.MotionParams.CountsPerInchC = 11.11;

                CM.SetTPParams();


//CLEAR BUFFER AND MOVE TO 0

                CM.FlushSegments();

                CM.StraightFeed(coordSpeed, 0, 0, 0, 0, 0, 0, 0, 0);

//MOVE TO N*0.1 ON AXES 2 AND 6 

        //DefineCoordSystem6(1,3,2,4,7,6);      
for (int i = 0; i < N; i++) 
         {

          CM.StraightFeed(5, 0, 0, -i * 0.1, 0, i * 0.1, 0, 0, 0);

          }

             CM.WaitForSegmentsFinished(true);

                        CM.FlushSegments();

                        CM.Dispose();


Does defining the coordinate system in C and using in C # work? The b and c of 6 axis coordinate system are flipped when I do it this way.


Thanks,


Eric



--- In DynoMotion@yahoogroups.com, <dynomotion@yahoogroups.com> wrote:

Hi Eric,

If the change in direction between straight feeds is less than the "Break Angle" setting then the axes should not stop.

After setting the Break Angle a call to:

KM_dotnet_Interop_CoordMotion_SetTPParams()

may be required to get the New Break Angle Setting to "take".  Some of our examples may be missing this.

HTH
Regards
TK

Group: DynoMotion Message: 8345 From: Tom Kerekes Date: 9/13/2013
Subject: Re: Create smooth path with Coordinated Motion
Hi Eric,

What Version are you using?

What order are you doing things?

How do you how the axes are mapped?

Regards
TK


Group: DynoMotion Message: 8354 From: eric_bassett@ymail.com Date: 9/14/2013
Subject: Re: Create smooth path with Coordinated Motion
I am using version 4.30. I map the axes (8-15) to channels 0-7 then define the coordinate system. The KFLOP is connected to a KANALOG. All of the mapping and defining are done in c programs. I can check that the axes are mapped correctly using jogs in the console. After this runs, I load a group of points to a c# array, create a new CM object, set breakangle, speeds, and counts per inch then run the straightfeeds.

I am not sure how to check how the coordinate system is defined. Is the channel mapping something I can query? I recall seeing a GetAxisDefinitions() command, but have not used it.

Forgive any typing errors, I'm on my phone.

--- In DynoMotion@yahoogroups.com, Tom Kerekes <tk@...> wrote:
>
> Hi Eric,
>
> What Version are you using?
>
> What order are you doing things?
>
> How do you how the axes are mapped?
>
> Regards
> TK
>
>
>
>
> ________________________________
> From: "eric_bassett@..." <eric_bassett@...>
> To: DynoMotion@yahoogroups.com
> Sent: Friday, September 13, 2013 2:04 PM
> Subject: RE: Re: [DynoMotion] Create smooth path with Coordinated Motion
>
>
>
>  
> Tom,
>
> Thank you for your response. It works fine now, but seems like b and c in an xyzabc coordinate system are flipped. If I call:
>
> DefineCoordSystem6(1,3,2,4,7,6); 
>
> in a thread on the KFLOP, the CM.Straightfeed runs as (1,3,2,4,6,7) in:
> //MOTION PARAM SETUP
>                 int N = 2000;
>                 CM.MotionParams.BreakAngle = 50;
>                 CM.MotionParams.MaxAccelX = 10000;
>                 CM.MotionParams.MaxAccelY = 10000;
>                 CM.MotionParams.MaxAccelZ = 10000;
>                 CM.MotionParams.MaxAccelA = 10000;
>                 CM.MotionParams.MaxAccelB = 10000;
>                 CM.MotionParams.MaxAccelC = 10000;
>                 CM.MotionParams.MaxVelX = 1000;
>                 CM.MotionParams.MaxVelY = 1000;
>                 CM.MotionParams.MaxVelZ = 1000;
>                 CM.MotionParams.MaxVelA = 1000;
>                 CM.MotionParams.MaxVelB = 1000;
>                 CM.MotionParams.MaxVelC = 1000;
>                 CM.MotionParams.CountsPerInchX = 5.555;
>                 CM.MotionParams.CountsPerInchY = 200;
>                 CM.MotionParams.CountsPerInchZ = 11.11;
>                 CM.MotionParams.CountsPerInchA = 5.555;
>                 CM.MotionParams.CountsPerInchB = 200;
>                 CM.MotionParams.CountsPerInchC = 11.11;
>                 CM.SetTPParams();
>
> //CLEAR BUFFER AND MOVE TO 0
>                 CM.FlushSegments();
>                 CM.StraightFeed(coordSpeed, 0, 0, 0, 0, 0, 0, 0, 0);
> //MOVE TO N*0.1 ON AXES 2 AND 6         //DefineCoordSystem6(1,3,2,4,7,6);      
> for (int i = 0; i < N; i++) 
>          {
> >          CM.StraightFeed(5, 0, 0, -i * 0.1, 0, i * 0.1, 0, 0, 0);
> >
> >          }
> >             CM.WaitForSegmentsFinished(true);
>                         CM.FlushSegments();
>                         CM.Dispose();
>
> Does defining the coordinate system in C and using in C # work? The b and c of 6 axis coordinate system are flipped when I do it this way.
>
> Thanks,
>
> Eric
>
>
> --- In DynoMotion@yahoogroups.com, <dynomotion@yahoogroups.com> wrote:
>
>
> Hi Eric,
>
> If the change in direction between straight feeds is less than the "Break Angle" setting then the axes should not stop.
>
> After setting the Break Angle a call to:
>
> KM_dotnet_Interop_CoordMotion_SetTPParams()
>
>
> may be required to get the New Break Angle Setting to "take".  Some of our examples may be missing this.
>
> HTH
> Regards
> TK
>
>
> ________________________________
> From: "eric_bassett@" <eric_bassett@>
> To: DynoMotion@yahoogroups.com
> Sent: Wednesday, September 11, 2013 2:06 PM
> Subject: [DynoMotion] Create smooth path with Coordinated Motion
>
>
>
>  
> Hello,
>
> Is there a way in C# to build a path of StraightFeeds so that there is not a pause between each coordinated motion? Doing a series of StraightFeed, the axes stop between each move.
>
> Thanks.
>
Group: DynoMotion Message: 8360 From: Tom Kerekes Date: 9/15/2013
Subject: Re: Create smooth path with Coordinated Motion
Hi Eric,

I'm still a bit confused about your mapping.  There are two levels of mapping:  #1 Devices (Encoders and DACs) to axes channels and #2 GCode Axes (XYZABC) to Axis Channels.

But anyway there was a bug in V4.30 that maps B Axis to both B and C in some cases.  Please try the latest test version to see if that solves your problem:

http://dynomotion.com/Software/KMotion431k.exe

Regards
TK

Group: DynoMotion Message: 8364 From: eric_bassett@ymail.com Date: 9/15/2013
Subject: Re: Create smooth path with Coordinated Motion

That sounds almost exactly like what is happening. I will try the latest version.



--- In dynomotion@yahoogroups.com, <tk@...> wrote:

Hi Eric,

I'm still a bit confused about your mapping.  There are two levels of mapping:  #1 Devices (Encoders and DACs) to axes channels and #2 GCode Axes (XYZABC) to Axis Channels.

But anyway there was a bug in V4.30 that maps B Axis to both B and C in some cases.  Please try the latest test version to see if that solves your problem:

http://dynomotion.com/Software/KMotion431k.exe

Regards
TK

Group: DynoMotion Message: 8383 From: eric_bassett@ymail.com Date: 9/22/2013
Subject: Re: Create smooth path with Coordinated Motion

Tom,


The update fixed the odd B and C axis behavior, but I have run into something new.


I am having an axis stop despite all signs indicating it is still receiving pulses. I set the axis to jog, wait until it is up to speed, and perform a coordinated motion. It works on a smoother coordinated motion, but on a more erratic coordinated motion the axis will jog for a minute or so and then stall.


Is there any software reason this could be happening? KFLOP processor overloaded when the coordinated motion gets kind of crazy?


Thanks.



--- In dynomotion@yahoogroups.com, <eric_bassett@...> wrote:

That sounds almost exactly like what is happening. I will try the latest version.



--- In dynomotion@yahoogroups.com, <tk@...> wrote:

Hi Eric,

I'm still a bit confused about your mapping.  There are two levels of mapping:  #1 Devices (Encoders and DACs) to axes channels and #2 GCode Axes (XYZABC) to Axis Channels.

But anyway there was a bug in V4.30 that maps B Axis to both B and C in some cases.  Please try the latest test version to see if that solves your problem:

http://dynomotion.com/Software/KMotion431k.exe

Regards
TK

Group: DynoMotion Message: 8386 From: Tom Kerekes Date: 9/23/2013
Subject: Re: Create smooth path with Coordinated Motion
Hi Eric,

It isn't clear what you are doing.  An Axis can not be moved both as an independent axis (with a Jog) and as a Coordinated Motion Axis at the same time (even if it remains stationary).  Is the axis you are jogging included in the DefineCoordSystem() definition?

I also don't understand what you mean by: "it is still receiving pulses".

Regards
TK

Group: DynoMotion Message: 8387 From: eric_bassett@ymail.com Date: 9/23/2013
Subject: Re: Create smooth path with Coordinated Motion

 I am jogging a separate axis from the coordinated motion. I believe it is still receiving pulses because the bulk status record continues increasing the current position of the jogged axis. The jogged axis is not included in DefineCoordSystem().


I will hook up a scope this afternoon and make sure the pulses are actually being sent.



--- In dynomotion@yahoogroups.com, <tk@...> wrote:

Hi Eric,

It isn't clear what you are doing.  An Axis can not be moved both as an independent axis (with a Jog) and as a Coordinated Motion Axis at the same time (even if it remains stationary).  Is the axis you are jogging included in the DefineCoordSystem() definition?

I also don't understand what you mean by: "it is still receiving pulses".

Regards
TK

Group: DynoMotion Message: 8390 From: eric_bassett@ymail.com Date: 9/25/2013
Subject: Re: Create smooth path with Coordinated Motion

The scope shows that pulses are being sent at the 800 RPM (~30,000 pulses per second with our steppers), but it looks like the pulses intermittently stop for something on the order of milliseconds (it looks like a blip on the scope).  It is long enough for the stepper to get out of sync and stop.


Are we overloading the processing power of the KFLOP by running a jog this fast with coordinated motion on other axes at the same time? 



---In dynomotion@yahoogroups.com, <eric_bassett@...> wrote:

 I am jogging a separate axis from the coordinated motion. I believe it is still receiving pulses because the bulk status record continues increasing the current position of the jogged axis. The jogged axis is not included in DefineCoordSystem().


I will hook up a scope this afternoon and make sure the pulses are actually being sent.



--- In dynomotion@yahoogroups.com, <tk@...> wrote:

Hi Eric,

It isn't clear what you are doing.  An Axis can not be moved both as an independent axis (with a Jog) and as a Coordinated Motion Axis at the same time (even if it remains stationary).  Is the axis you are jogging included in the DefineCoordSystem() definition?

I also don't understand what you mean by: "it is still receiving pulses".

Regards
TK

Group: DynoMotion Message: 8391 From: Tom Kerekes Date: 9/25/2013
Subject: Re: Create smooth path with Coordinated Motion
Hi Eric,

Processing power should not be the issue and that rate is actually not very fast.

Please post your configuration files and provide a more complete description of what you are doing.  Ideally a way for us to duplicate the problem.

Another option would be to capture the motion of the Jogged Axis and/or the Coordinated Motion Axes with something like the example program: CaptureXYZMotionToFile.c  

That would show whether there are any anomalies in any of the trajectories.  This method can sample as fast as every 180us.

Regards
TK


Group: DynoMotion Message: 8415 From: eric_bassett@ymail.com Date: 9/30/2013
Subject: Re: Create smooth path with Coordinated Motion

 Tom,


Please download the zip file at:


https://www.dropbox.com/s/1p8xvay4e2g6g36/20130926%20Lens%20Polisher.zip


The important sections are in the lensMain.cs source at the end in the class "runCoord". This class initializes the coordinated motion (coordinate system is defined in "axisInitialize.c" in the Debug folder. The system runs "sequence.c".


Where the problem occurs, the KFLOP jogs a non-coordinated axis and sets a flag to run Coordinated motion (READY_FOR_CM), the PC runs the coordinated motion (a "for loop" that StraightFeeds an array of points in "runCoord"), the PC sets a flag when complete, and the KFLOP finishes motion.



---In dynomotion@yahoogroups.com, <tk@...> wrote:

Hi Eric,

Processing power should not be the issue and that rate is actually not very fast.

Please post your configuration files and provide a more complete description of what you are doing.  Ideally a way for us to duplicate the problem.

Another option would be to capture the motion of the Jogged Axis and/or the Coordinated Motion Axes with something like the example program: CaptureXYZMotionToFile.c  

That would show whether there are any anomalies in any of the trajectories.  This method can sample as fast as every 180us.

Regards
TK


Group: DynoMotion Message: 8416 From: eric_bassett@ymail.com Date: 9/30/2013
Subject: Re: Create smooth path with Coordinated Motion

Just found something else out. It works fine with a StraightTraverse but not a StraightFeed.


Does this bring anything to mind?



---In dynomotion@yahoogroups.com, <eric_bassett@...> wrote:

 Tom,


Please download the zip file at:


https://www.dropbox.com/s/1p8xvay4e2g6g36/20130926%20Lens%20Polisher.zip


The important sections are in the lensMain.cs source at the end in the class "runCoord". This class initializes the coordinated motion (coordinate system is defined in "axisInitialize.c" in the Debug folder. The system runs "sequence.c".


Where the problem occurs, the KFLOP jogs a non-coordinated axis and sets a flag to run Coordinated motion (READY_FOR_CM), the PC runs the coordinated motion (a "for loop" that StraightFeeds an array of points in "runCoord"), the PC sets a flag when complete, and the KFLOP finishes motion.



---In dynomotion@yahoogroups.com, <tk@...> wrote:

Hi Eric,

Processing power should not be the issue and that rate is actually not very fast.

Please post your configuration files and provide a more complete description of what you are doing.  Ideally a way for us to duplicate the problem.

Another option would be to capture the motion of the Jogged Axis and/or the Coordinated Motion Axes with something like the example program: CaptureXYZMotionToFile.c  

That would show whether there are any anomalies in any of the trajectories.  This method can sample as fast as every 180us.

Regards
TK


Group: DynoMotion Message: 8417 From: Tom Kerekes Date: 9/30/2013
Subject: Re: Create smooth path with Coordinated Motion
Hi Eric,

I see one issue.  I believe these function calls are out of order:

                   CM.WaitForSegmentsFinished(true);
                    CM.FlushSegments();


They should be

                    CM.FlushSegments();
                   CM.WaitForSegmentsFinished(true);

The idea is to:

#1 flush any remaining coordinated motion in the Trajectory Planner or buffers down to KFLOP
#2 wait for KFLOP to finish the coordinated motion it has been told to do.


I believe doing these in reverse will cause several problems.  First, all the motion might not be sent and then waiting for KFLOP to finish may cause an abrupt stop in the middle of a motion.  Secondly the remaining motion will be commanded without a wait for it to finish.  So you then tell your User Program to go ahead and Jog axes that are still doing Coordinated motion.

HTH
Regards
TK



Group: DynoMotion Message: 8418 From: eric_bassett@ymail.com Date: 9/30/2013
Subject: Re: Create smooth path with Coordinated Motion

Thank you for the tip. The jogged axis is not a coordinated motion axis. It runs independently (think of it as a routing bit with other axes moving it). 



---In dynomotion@yahoogroups.com, <tk@...> wrote:

Hi Eric,

I see one issue.  I believe these function calls are out of order:

                   CM.WaitForSegmentsFinished(true);
                    CM.FlushSegments();


They should be

                    CM.FlushSegments();
                   CM.WaitForSegmentsFinished(true);

The idea is to:

#1 flush any remaining coordinated motion in the Trajectory Planner or buffers down to KFLOP
#2 wait for KFLOP to finish the coordinated motion it has been told to do.


I believe doing these in reverse will cause several problems.  First, all the motion might not be sent and then waiting for KFLOP to finish may cause an abrupt stop in the middle of a motion.  Secondly the remaining motion will be commanded without a wait for it to finish.  So you then tell your User Program to go ahead and Jog axes that are still doing Coordinated motion.

HTH
Regards
TK



Group: DynoMotion Message: 8419 From: eric_bassett@ymail.com Date: 9/30/2013
Subject: Re: Create smooth path with Coordinated Motion

Also, the pulses on the jogged axis stop for approximately 300 us and sometimes more each time a corner is reached in the coordinated motion. With the exception of the 300 us intermittent drops, the pulses continue (although the motor has stopped) throughout coordinated motion. 



---In dynomotion@yahoogroups.com, <eric_bassett@...> wrote:

Thank you for the tip. The jogged axis is not a coordinated motion axis. It runs independently (think of it as a routing bit with other axes moving it). 



---In dynomotion@yahoogroups.com, <tk@...> wrote:

Hi Eric,

I see one issue.  I believe these function calls are out of order:

                   CM.WaitForSegmentsFinished(true);
                    CM.FlushSegments();


They should be

                    CM.FlushSegments();
                   CM.WaitForSegmentsFinished(true);

The idea is to:

#1 flush any remaining coordinated motion in the Trajectory Planner or buffers down to KFLOP
#2 wait for KFLOP to finish the coordinated motion it has been told to do.


I believe doing these in reverse will cause several problems.  First, all the motion might not be sent and then waiting for KFLOP to finish may cause an abrupt stop in the middle of a motion.  Secondly the remaining motion will be commanded without a wait for it to finish.  So you then tell your User Program to go ahead and Jog axes that are still doing Coordinated motion.

HTH
Regards
TK



Group: DynoMotion Message: 8420 From: Tom Kerekes Date: 9/30/2013
Subject: Re: Create smooth path with Coordinated Motion
Hi Eric,

Ah!  I think I see what is going on.  Your Acceleration is set crazy high - 10,000 in/sec2 = 26 Gs !!

This is combining with other settings to form something KFLOP can't handle:


Your BreakAngle of:

            CM.MotionParams.BreakAngle = 180;

Tells the Trajectory planner to not stop at corners but to "round" the corners.

I don't see anywhere you set the corner rounding parameters so the defaults are used:

    m_MotionParams.CornerTol = 0.0002;
    m_MotionParams.FacetAngle = 0.5;

This results in a 90 degree turn rounded with an 0.2 mil radius arc formed with 180 segments.

Normally such a tight curve would require very slow motion and not be a problem.  But with such a high acceleration setting the speed is quite high:

Corner Velocity = sqrt(a x r) = sqrt(10,000 x 0.0002) = 1.41 inches/sec

Corner length = 2 PI r / 4 = 0.314 mils

Corner Time 223us 

I think you are correct.  KFLOP is choking on trying to process 180 motion segments in 223us.

I don't really understand your application or your requirements.  You might try one or more of the following:

#1 - reduce your acceleration to something reasonable (ie 100X smaller)
#2 - turn off corner rounding by setting CM.MotionParams.CornerTol to zero
#3 - increase CM.MotionParams.FacetAngle
#4 - stop at corners by reducing CM.MotionParams.BreakAngle

HTH
Regards
TK

Group: DynoMotion Message: 8445 From: eric_bassett@ymail.com Date: 10/2/2013
Subject: Re: Create smooth path with Coordinated Motion

Tom,


Thank you. We increased the CornerTol and the problem stopped. I assumed (incorrectly) that it was the amount of allowed deviation from path through a corner.


I will try to implement what I now know, and correct me if I am wrong:


So basically FacetAngle controls the number of degrees of turn allowed in a section that is executed as linear (90 degree turn would be 180 linear sections), CornerTol is the minimum radius on corners (a corner that turns sharper than CornerTol will be rounded out), and breakangle defines the maximum angle between two linear sections that motion does not stop between?


Another question:

Do you see a problem with aborting coordinated motion in the main thread while coordinated motion is being executed in a thread that was called by main? I would then abort the thread with the coordinated motion.


I want to run coordinated motion in the non-GUI thread, but be able to stop it from the GUI thread. I get buffer underflow when I do this.



---In dynomotion@yahoogroups.com, <tk@...> wrote:

Hi Eric,

Ah!  I think I see what is going on.  Your Acceleration is set crazy high - 10,000 in/sec2 = 26 Gs !!

This is combining with other settings to form something KFLOP can't handle:


Your BreakAngle of:

            CM.MotionParams.BreakAngle = 180;

Tells the Trajectory planner to not stop at corners but to "round" the corners.

I don't see anywhere you set the corner rounding parameters so the defaults are used:

    m_MotionParams.CornerTol = 0.0002;
    m_MotionParams.FacetAngle = 0.5;

This results in a 90 degree turn rounded with an 0.2 mil radius arc formed with 180 segments.

Normally such a tight curve would require very slow motion and not be a problem.  But with such a high acceleration setting the speed is quite high:

Corner Velocity = sqrt(a x r) = sqrt(10,000 x 0.0002) = 1.41 inches/sec

Corner length = 2 PI r / 4 = 0.314 mils

Corner Time 223us 

I think you are correct.  KFLOP is choking on trying to process 180 motion segments in 223us.

I don't really understand your application or your requirements.  You might try one or more of the following:

#1 - reduce your acceleration to something reasonable (ie 100X smaller)
#2 - turn off corner rounding by setting CM.MotionParams.CornerTol to zero
#3 - increase CM.MotionParams.FacetAngle
#4 - stop at corners by reducing CM.MotionParams.BreakAngle

HTH
Regards
TK

Group: DynoMotion Message: 8447 From: Tom Kerekes Date: 10/2/2013
Subject: Re: Create smooth path with Coordinated Motion
Hi Eric,

Oops.  My mistake.  I was confusing Corner Tolerance and Corner Radius.  Corner Tolerance IS allowed deviation through a corner.  See:


For a square corner they are related as:

Tol = (1 - sqrt(2)) x Radius = 0.41 x Radius.  But the overall problem is the same:

Very High Acceleration with Very Small Radius(Tolerance) with small Facet Angle = Too many segments per second.

Yes to turn a through a wider curve takes less time than a tight curve.

But did you still leave the crazy high acceleration?

  
regarding Threading:

I don't follow your description.  But yes it is common to do coordinated motion form a worker thread and to want to stop it from the GUI thread.  There are basically two techniques: Abort and Halt.  Both are calls that can be made from a GUI thread that basically just set a flag.  The flag should then be quickly detected by the Coordinated Motion Libraries and handled and result in the worker thread self-terminating (error returns all the way back out).  Abort is very crude and just unconditionally exits everything.  Halt is much more graceful.  It will perform an immediate FeedHold to bring motion in a controlled stop along any path.  It then determines the point in the Trajectory Segments where the final stop occurred.  Coordinated motion is terminated in KFLOP, all buffers are reset, and the routines exit, which would exit any worker thread.

Regards
TK